<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Windows Application Programming Interface</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Windows_Application_Programming_Interface"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Windows_Application_Programming_Interface rootpage-Windows_Application_Programming_Interface skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Windows Application Programming Interface</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Das <b>Windows Application Programming Interface</b> (kurz <b>WinAPI</b>; <a href="Englische_Sprache" title="Englische Sprache">englisch</a> für: „Windows-Anwendungs-Programmierschnittstelle“) ist eine <a href="Programmierschnittstelle" title="Programmierschnittstelle">Programmierschnittstelle</a> und <a href="Laufzeitumgebung" title="Laufzeitumgebung">Laufzeitumgebung</a> zur Erstellung von <a href="Anwendungsprogramm" class="mw-redirect" title="Anwendungsprogramm">Anwendungsprogrammen</a> für <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a>-<a href="Betriebssystem" title="Betriebssystem">Betriebssysteme</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Einzelheiten">Einzelheiten</h2></div>
<p>Die Funktionen der WinAPI sind ausschließlich in den Programmiersprachen <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a> und <a href="Assemblersprache" title="Assemblersprache">Assembler</a> geschrieben und können von Windows-Programmierern in selbst erstelltem <a href="Quelltext" title="Quelltext">Quelltext</a> verwendet werden. Sie befinden sich in dynamischen Bibliotheken, den sogenannten <a href="Dynamic_Link_Library" title="Dynamic Link Library">DLL</a>-Dateien, beispielsweise <i>kernel32.dll</i>, <i>user32.dll</i> und <i>gdi32.dll</i> und sind Bestandteil des Betriebssystems. Die WinAPI abstrahiert die <a href="Native_API" title="Native API">nativen Funktionen</a> des Betriebssystems, die durch die ntdll.dll exportiert und im Windows-Kernel (ntoskrnl.exe) implementiert sind. Das ermöglicht es Microsoft, die Implementierung der WinAPI zu modifizieren, ohne deren Funktionsweise zu ändern.
</p><p>Die WinAPI wird immer verwendet, wenn native Windows-Programme geschrieben werden, obwohl der Programmierer sie eventuell direkt im Quelltext gar nicht aufgerufen hat. Die Aufrufe der API werden durch eine <a href="Laufzeitbibliothek" title="Laufzeitbibliothek">Laufzeitbibliothek</a> gekapselt, die ihrerseits Funktionen der Windows-API aufruft. Windows NT/<a href="Microsoft_Windows_2000" title="Microsoft Windows 2000">2000</a> hat eine <a href="Native_API" title="Native API">native API</a>, die sowohl für im Kernel-Mode als auch für im User-Mode laufende Programme eine Programmierschnittstelle bereitstellt. Diese Schnittstellen sind Bestandteil des Betriebssystemkerns, der letzten Endes alle hardwarenahen Operationen mit und an der Hardware durchführt. Viele von Programmen ausgeführte Aktionen, wie I/O-Operationen, Windows-Dialoge oder Speicherverwaltung, wären ohne die Windows API nur sehr eingeschränkt durchführbar. Systemnaher Zugriff auf das Windows-Betriebssystem, der hauptsächlich von Gerätetreibern benötigt wird, wird mithilfe des <i><a href="Ger%C3%A4tetreiber" title="Gerätetreiber">Windows Driver Model</a> (WDM)</i> unter allen Windows-NT-Versionen realisiert.
</p><p>Die <a href="Objektorientiert" class="mw-redirect" title="Objektorientiert">objektorientierten</a> Bibliotheken, wie die <a href="Microsoft_Foundation_Classes" title="Microsoft Foundation Classes">MFC</a>-Bibliothek und das <a href=".NET_Framework" class="mw-redirect" title=".NET Framework">.NET Framework</a>, sind eine Alternative zur direkten Nutzung der Windows API. Dabei werden die nativen Methoden der Windows API gekapselt und ermöglichen auf diese Art eine bequemere objektorientierte Handhabung der zur Verfügung stehenden Funktionen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Versionen">Versionen</h2></div>
<p>Beinahe mit jeder neuen Version von Windows wurde die Windows API erweitert und abgeändert. Der Name der API wurde dennoch zwischen den Versionen beibehalten oder nur leicht verändert, um gravierende Unterschiede zwischen den Windows-Architekturen und den <a href="Plattform_(Computer)" title="Plattform (Computer)">Plattformen</a> zu verdeutlichen. So wurde der ursprüngliche Begriff WinAPI, der in den 16-Bit-Versionen von Windows vorherrschte, um die Zahl 32 zu Win32 API erweitert, um dem bedeutsamen Sprung zur 32-Bit-Architektur deutlich zu machen. Dennoch wird heute der allgemeine Begriff Windows API verwendet, der sowohl alte als auch neuere APIs miteinschließt.
</p>
<div class="mw-heading mw-heading3"><h3 id="Win16">Win16</h3></div>
<p><i>Win16</i> war die erste API für die <a href="16-Bit" class="mw-redirect" title="16-Bit">16-Bit</a>-Versionen von <a href="Windows" class="mw-redirect" title="Windows">Windows</a>. Gängiger Begriff war schlicht Windows API, wurde aber später umbenannt in Win16, um sie von der neueren Windows API der 32-Bit-Architektur unterscheiden zu können. Die Funktionen der Win16 API liegen hauptsächlich im Kern des Betriebssystems <i>kernel.exe</i> (oder <i>krnl286.exe</i> oder <i>krnl386.exe</i>), <i>user.exe</i> und <i>gdi.exe</i>. Trotz der Dateiendung <code>exe</code> sind diese Dateien tatsächlich sogenannte <a href="Dynamic_Link_Library" title="Dynamic Link Library">Programmbibliotheken</a>. 16-Bit-Windows-Anwendungen sind ausschließlich für einen <a href="Kooperatives_Multitasking" class="mw-redirect" title="Kooperatives Multitasking">kooperativen Multitasking</a>-Betriebsmodus entworfen (englisch <i><span lang="en">designed</span></i>), unter modernen 32-Bit-Windows-Versionen laufen sie mithilfe der <a href="Virtual_8086_Mode" title="Virtual 8086 Mode">Virtual-8086-Mode</a>-Einheit der CPU in einer VM86-Instanz, die wiederum als 32-Bit-Windows-Anwendung <a href="Pr%C3%A4emptives_Multitasking" class="mw-redirect" title="Präemptives Multitasking">präemptives Multitasking</a> verwendet. Die Ursache für das <a href="Kooperatives_Multitasking" class="mw-redirect" title="Kooperatives Multitasking">kooperative Multitasking</a>-Design liegt darin begründet, dass der 8086-Prozessor, der von Windows bis Version 3.0 unterstützt wurde, über keine <a href="Memory_Protection_Unit" class="mw-redirect" title="Memory Protection Unit">Memory-Protection-Unit</a> verfügt. Theoretisch wäre präemptives Multitasking auf einer solchen CPU zwar auch in Software umsetzbar gewesen, aber eine solche reine Softwarelösung hätte sehr viel Rechenleistung erfordert und wäre auf einem 8086 zu langsam gewesen.
Ein Nachteil von Win16 Anwendungen ist, dass sie auch die <a href="Segmentierung_(Speicherverwaltung)#Intels_x86-Prozessoren_im_Real-Mode" title="Segmentierung (Speicherverwaltung)">segmentierten Speichermodelle</a> nutzen müssen, wie es auch in <a href="MS-DOS" title="MS-DOS">MS-DOS</a> üblich war. Dies führte dazu, dass bei den Speichermodellen <code>huge</code> und <code>large</code> die Hochsprachencompiler den Code jeder Quellcodedatei eines Software-Projekts in ihr eigenes Segment in der <a href="Ausf%C3%BChrbare_Datei" title="Ausführbare Datei">ausführbaren Datei</a> verpackten, weswegen der Funktionsaufruf einer Funktion, der in einer anderen Quellcodedatei definiert wurde, langsamer war, als Funktionsaufrufe von Funktionen, die in der gleichen Quellcodedatei und damit dem gleichen Segment lagen.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Win32">Win32</h3></div>
<p><i>Win32</i> ist die <a href="32-Bit" class="mw-redirect" title="32-Bit">32-Bit</a>-<a href="Application_Programming_Interface" class="mw-redirect" title="Application Programming Interface">API</a> für moderne Versionen von Windows. Die API besteht aus Funktionen, die, wie bei <a href="#Win16">Win16</a>, in Programmbibliotheken implementiert sind. Die Kern-DLLs von Win32 sind kernel32.dll, user32.dll und <a href="Graphics_Device_Interface" title="Graphics Device Interface">gdi32.dll</a>. Win32 wurde mit <a href="Microsoft_Windows_NT" title="Microsoft Windows NT">Windows NT</a> eingeführt. Die Version von Win32, die mit <a href="Microsoft_Windows_95" title="Microsoft Windows 95">Windows 95</a> ausgeliefert wurde, lief ursprünglich unter dem Namen Win32c, wobei das „c“ für Kompatibilität (<span style="font-style:normal;font-weight:normal"><a href="Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic">compatibility</span>) stand, aber dieser Ausdruck wurde später von Microsoft zugunsten von Win32 wieder verworfen. In Windows NT und seinen Nachfolgern (eingeschlossen alle modernen Windows-Versionen) werden Win32-Aufrufe durch zwei Module ausgeführt, csrss.exe (<span style="font-style:normal;font-weight:normal"><a href="Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic">Client/Server Runtime Subsystem</span>) im User-Modus und win32k.sys im Kernel-Modus. Das dient dem Schutz des Betriebssystems und verhindert, dass laufende Anwendungen des Benutzers kritische Daten des Betriebssystems modifizieren oder darauf zugreifen können. Die Modi werden direkt vom Prozessor zur Verfügung gestellt.
</p><p>Obwohl auch <a href="Microsoft_Windows_CE" title="Microsoft Windows CE">Windows CE</a> eine Win32-ähnliche API enthält, gibt es tiefgreifende Unterschiede,<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> die Portierungen von Quellcode in der Realität meist aufwändig gestalten.
</p>
<div class="mw-heading mw-heading3"><h3 id="Win32s">Win32s</h3></div>
<p><i>Win32s</i> ist die 32-Bit-API für die <a href="Microsoft_Windows_3.1" title="Microsoft Windows 3.1">Windows-3.1x</a>-Familie und als solche die 32-Bit-Erweiterung<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> für die ansonsten 16-bittigen Betriebssysteme. Das „s“ steht für Teilmenge (englisch <i><span lang="en">subset</span></i>). Dabei wurden die Funktionsbibliotheken aus Windows NT nicht komplett übernommen, sondern lediglich eine Auswahl daraus. So ist beispielsweise <a href="Microsoft_Office" title="Microsoft Office">MS Office 97</a> unter Windows NT 3.51 lauffähig, nicht jedoch unter Windows 3.1x. In Kombination mit <a href="Grafikstandard" title="Grafikstandard">Grafikschnittstellen</a> wie <a href="OpenGL" title="OpenGL">OpenGL</a> oder <a href="Video_for_Windows" title="Video for Windows">Video for Windows</a> sollte damit bis zum Erscheinen von Windows 95 ein ausreichender Standard für Heimanwender gesetzt werden. Sie wurde mehrmals angepasst und ergänzt. Die letzte Version war 1.30c.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Für die Nutzung der Win32s-API ist in Windows 3.x der <a href="Windows_3.x#Erweiterter_Modus_(Enhanced_Mode)" title="Windows 3.x">Enhanced Mode</a> erforderlich.
</p>
<div class="mw-heading mw-heading3"><h3 id="Win64">Win64</h3></div>
<p><i>Win32 für 64-Bit-Windows</i>, auch bekannt unter dem Namen <i>Win64</i>, ist die Version der API, für die <a href="64-Bit" class="mw-redirect" title="64-Bit">64-Bit</a>-Versionen von Windows – namentlich <a href="Microsoft_Windows_XP" title="Microsoft Windows XP">Windows XP</a> „x64 Edition“, Windows Server 2003 „x64 Edition“ (für <a href="AMD_Athlon_64" title="AMD Athlon 64">AMD64</a>-Prozessoren) und Windows Server 2003 für <a href="Intel_Itanium" title="Intel Itanium">Itanium</a>-Serien. Bei den 64-Bit-Versionen handelt es sich nur um zwei weitere unterstützte Plattformen innerhalb der Windows-NT-Architektur, so dass sowohl die 32-Bit- als auch die 64-Bit-Version einer Software aus demselben Quellcode kompiliert werden können. Alle <a href="Zeiger_(Informatik)" title="Zeiger (Informatik)">Zeiger</a> auf den Speicher sind standardmäßig 64 Bit groß, weshalb der Quellcode gegebenenfalls auf Kompatibilität überprüft werden muss. Obwohl keine neuen Funktionen zur API hinzugefügt wurden, gibt es Unterschiede zwischen Win32 und Win64. Deshalb wird auf 64-Bit-Systemen – für 32-Bit-Programme – durch eine Abstraktionsebene namens <a href="WOW64" title="WOW64">WOW64</a> eine zu <a href="Win32" class="mw-redirect" title="Win32">Win32</a> kompatible API bereitgestellt.
</p>
<div class="mw-heading mw-heading3"><h3 id=".NET_Framework">.NET Framework</h3></div>
<p>Die <i><a href=".NET_Framework" class="mw-redirect" title=".NET Framework">.NET-Framework</a></i>-API (früher <i>WinFX</i> genannt) ist eine neuere, <a href="Objektorientierung" title="Objektorientierung">objektorientierte</a> API, die die native Windows-API erweitert. Die API wurde unter anderem entworfen, um zukünftigen Anwendungen einen einfachen, verwalteten Zugriff auf die zahlreichen neuen Features in <a href="Microsoft_Windows_Vista" title="Microsoft Windows Vista">Windows Vista</a> zu geben. .NET-Anwendungen laufen als sogenannter <a href="Managed_Code" class="mw-redirect" title="Managed Code">Managed Code</a> (verwalteter Code) unter einer Laufzeitumgebung namens <a href="Common_Language_Runtime" title="Common Language Runtime">Common Language Runtime</a> (CLR), einer <a href="Virtuelle_Maschine" title="Virtuelle Maschine">virtuellen Maschine</a>, die im Sinne der Abstraktion keine direkten Maschinenbefehle ausführt, sondern stattdessen das aus Bytecode bestehende Programm in Maschinencode umwandelt, bevor es dann vom Prozessor ausgeführt werden kann. Der GUI-API-Satz für WinFX, der unter dem Codenamen <i>Avalon</i> läuft, wird <a href="Windows_Presentation_Foundation" title="Windows Presentation Foundation">Windows Presentation Foundation</a> genannt und löst die alten GDI- und GDI+-APIs ab. Sie setzt direkt auf <a href="DirectX" title="DirectX">DirectX</a> auf und benötigt Grafikkarten mit Hardwarebeschleunigung, um alle Effekte angemessen darstellen zu können.
</p>
<div class="mw-heading mw-heading3"><h3 id="Weitere_APIs">Weitere APIs</h3></div>
<p>Frühere Versionen von Windows haben auch die APIs anderer Betriebssysteme mitgebracht. Windows NT 3.1 sowie Windows NT 4.0 waren noch mit einer leicht abgespeckten Version der <a href="OS/2" title="OS/2">OS/2</a>- und einer <a href="POSIX" title="POSIX">POSIX</a>-API ausgestattet. Dadurch war es in eingeschränkter Form möglich, auch Programme auszuführen, die eigentlich für OS/2 oder <a href="Unix" title="Unix">Unix</a>-Systeme kompiliert waren. Möglich wurde das durch eine tiefer liegende zweite API-Schicht – die weitestgehend undokumentierte <i><span lang="en">native</span></i> <i>API</i>. Auf die Funktionen dieser API stößt man z. B., wenn man Betriebssystem-DLLs mit einem <a href="Debugger" title="Debugger">Debugger</a> durchläuft. Die Windows-API-Funktionen von <a href="Win32" class="mw-redirect" title="Win32">Win32</a> usw. rufen zum Teil wiederum Funktionen der <a href="Native_API" title="Native API">Native API</a> auf, ebenso wie das OS/2- und POSIX-Subsystem. Inzwischen hat Microsoft diese anderen APIs entfernt, der prinzipielle Mechanismus ist aber auch in Windows Vista noch unverändert. Mit der .NET-API wurde sogar eine dritte, nun aber wesentlich modernere objektorientierte Schicht über die Win32-API und die Native API gesetzt.
</p>
<div class="mw-heading mw-heading3"><h3 id="Implementierungen_außerhalb_von_Windows"><span id="Implementierungen_au.C3.9Ferhalb_von_Windows"></span>Implementierungen außerhalb von Windows</h3></div>
<p>Neben der in aktuellen <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a>-Versionen enthaltenen Win32/64-API von <a href="Microsoft" title="Microsoft">Microsoft</a> gibt es auch Varianten für andere <a href="Betriebssystem" title="Betriebssystem">Betriebssysteme</a>. Diese Nachbildungen dienen dazu, Windows-Programme ohne Windows-Betriebssystem zu nutzen. Aus rechtlichen Gründen sind meist nicht alle Funktion der Original-API vorhanden, was die Kompatibilität mit Programmen einschränken kann. Da die wenigsten Programme alle Funktionen der Win32/64-API benötigen, sind viele aber trotzdem voll nutzbar.
</p><p>Beispiele von Win32-Implementierungen:
</p>
<ul><li><a href="Wine" title="Wine">Wine</a>: Ein <a href="Open_Source" title="Open Source">Open-Source</a>-Projekt mit dem Ziel, eine vollständige Win32- und Win64-API für <a href="Linux" title="Linux">Linux</a>- und <a href="Unix" title="Unix">Unix</a>-artige Betriebssysteme zu erstellen</li>
<li><a href="CrossOver" title="CrossOver">CrossOver</a>: Eine kommerzielle Erweiterung von <a href="Wine" title="Wine">Wine</a></li>
<li><a href="Cedega" title="Cedega">Cedega</a> <i>(früher WineX)</i>: Eine nahezu komplette kommerzielle Win32- und DirectX-Implementation mit dem Ziel, Windows-Spiele unter Linux lauffähig zu machen</li>
<li><a href="Darwine" title="Darwine">Darwine</a>: Eine Wine-Portierung für <a href="MacOS" title="MacOS">macOS</a></li>
<li><a href="Odin_(Software)" title="Odin (Software)">Odin</a>: Wine32-API für <a href="OS/2" title="OS/2">OS/2</a></li>
<li><a href="Proton_(Software)" title="Proton (Software)">Proton</a>: Eine auf Wine basierende Software mit dem Ziel, Windows-Spiele auf anderen Plattformen auszuführen</li>
<li><a href="ReWind" title="ReWind">ReWind</a></li>
<li><a href="ReactOS" title="ReactOS">ReactOS</a>: Das Betriebssystem verwendet einen Teil der Wine-Bibliotheken, um sich doppelte Entwicklungsarbeit zu sparen.</li>
<li><a href="HX_DOS_Extender" title="HX DOS Extender">HX DOS Extender</a>: Macht Win32-Programme unter DOS lauffähig.</li>
<li>Wabi: <i>Windows Application Binary Interface</i> ein Win16-API-Projekt von <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a> aus den frühen 1990er-Jahren.</li></ul>
<p>Das <a href="Mono-Projekt" class="mw-redirect" title="Mono-Projekt">Mono-Projekt</a> bietet eine Entwicklungsumgebung und eine API für .NET-Programme in Linux- und Unix-artigen Betriebssystemen. Mono orientiert sich dabei vor allem am <a href="Common_Language_Infrastructure" title="Common Language Infrastructure">Common-Language-Infrastructure</a>-Standard.
</p>
<div class="mw-heading mw-heading2"><h2 id="Programmbeispiel">Programmbeispiel</h2></div>
<p>Folgender <a href="Quelltext" title="Quelltext">Quelltext</a> implementiert mit Hilfe der WinAPI ein Programm, das ein Fenster erzeugt und den Text „<a href="Hello_World" class="mw-redirect" title="Hello World">Hello World</a>!“ ausgibt. Das Programm ist in der Programmiersprache C geschrieben.
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><windows.h></span>
<span class="n">LRESULT</span><span class="w"> </span><span class="n">CALLBACK</span><span class="w"> </span><span class="n">WndProc</span><span class="p">(</span><span class="n">HWND</span><span class="p">,</span><span class="w"> </span><span class="n">UINT</span><span class="p">,</span><span class="w"> </span><span class="n">WPARAM</span><span class="p">,</span><span class="w"> </span><span class="n">LPARAM</span><span class="p">);</span>
<span class="kt">int</span><span class="w"> </span><span class="n">WINAPI</span><span class="w"> </span><span class="nf">WinMain</span><span class="p">(</span><span class="n">HINSTANCE</span><span class="w"> </span><span class="n">hInstance</span><span class="p">,</span><span class="w"> </span><span class="n">HINSTANCE</span><span class="w"> </span><span class="n">hPrevInstance</span><span class="p">,</span>
<span class="w"> </span><span class="n">PSTR</span><span class="w"> </span><span class="n">szCmdLine</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">iCmdShow</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="n">TCHAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">szAppName</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TEXT</span><span class="p">(</span><span class="s">"Klassenname"</span><span class="p">);</span>
<span class="w"> </span><span class="n">HWND</span><span class="w"> </span><span class="n">hWnd</span><span class="p">;</span>
<span class="w"> </span><span class="n">MSG</span><span class="w"> </span><span class="n">msg</span><span class="p">;</span>
<span class="w"> </span><span class="n">WNDCLASSEX</span><span class="w"> </span><span class="n">wndclassex</span><span class="p">;</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">cbSize</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">WNDCLASSEX</span><span class="p">);</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">style</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CS_HREDRAW</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">CS_VREDRAW</span><span class="p">;</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">lpfnWndProc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">&</span><span class="n">WndProc</span><span class="p">;</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">cbClsExtra</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">cbWndExtra</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">hInstance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hInstance</span><span class="p">;</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">hIcon</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LoadIcon</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="n">IDI_APPLICATION</span><span class="p">);</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">hCursor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LoadCursor</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="n">IDC_ARROW</span><span class="p">);</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">hbrBackground</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">HBRUSH</span><span class="p">)</span><span class="n">GetStockObject</span><span class="p">(</span><span class="n">WHITE_BRUSH</span><span class="p">);</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">lpszMenuName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">lpszClassName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">szAppName</span><span class="p">;</span>
<span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">hIconSm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wndclassex</span><span class="p">.</span><span class="n">hIcon</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">RegisterClassEx</span><span class="p">(</span><span class="o">&</span><span class="n">wndclassex</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">MessageBox</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="n">TEXT</span><span class="p">(</span><span class="s">"RegisterClassEx fehlgeschlagen!"</span><span class="p">),</span>
<span class="w"> </span><span class="n">szAppName</span><span class="p">,</span><span class="w"> </span><span class="n">MB_OK</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">MB_ICONERROR</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">hWnd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">CreateWindowEx</span><span class="p">(</span><span class="n">WS_EX_OVERLAPPEDWINDOW</span><span class="p">,</span><span class="w"> </span><span class="c1">// erweiterter Fensterstil</span>
<span class="w"> </span><span class="n">szAppName</span><span class="p">,</span><span class="w"> </span><span class="c1">// Name der Fensterklasse</span>
<span class="w"> </span><span class="n">TEXT</span><span class="p">(</span><span class="s">"Fenstertitel"</span><span class="p">),</span><span class="w"> </span><span class="c1">// Fenstertitel</span>
<span class="w"> </span><span class="n">WS_OVERLAPPEDWINDOW</span><span class="p">,</span><span class="w"> </span><span class="c1">// Fensterstil</span>
<span class="w"> </span><span class="n">CW_USEDEFAULT</span><span class="p">,</span><span class="w"> </span><span class="c1">// X-Position des Fensters</span>
<span class="w"> </span><span class="n">CW_USEDEFAULT</span><span class="p">,</span><span class="w"> </span><span class="c1">// Y-Position des Fensters</span>
<span class="w"> </span><span class="n">CW_USEDEFAULT</span><span class="p">,</span><span class="w"> </span><span class="c1">// Fensterbreite</span>
<span class="w"> </span><span class="n">CW_USEDEFAULT</span><span class="p">,</span><span class="w"> </span><span class="c1">// Fensterhöhe</span>
<span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="c1">// übergeordnetes Fenster</span>
<span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="c1">// Menü</span>
<span class="w"> </span><span class="n">hInstance</span><span class="p">,</span><span class="w"> </span><span class="c1">// Programm-Kopiezähler (Programm-ID)</span>
<span class="w"> </span><span class="nb">NULL</span><span class="p">);</span><span class="w"> </span><span class="c1">// zusätzliche Parameter</span>
<span class="w"> </span><span class="n">ShowWindow</span><span class="p">(</span><span class="n">hWnd</span><span class="p">,</span><span class="w"> </span><span class="n">iCmdShow</span><span class="p">);</span>
<span class="w"> </span><span class="n">UpdateWindow</span><span class="p">(</span><span class="n">hWnd</span><span class="p">);</span>
<span class="w"> </span><span class="k">while</span><span class="p">(</span><span class="n">GetMessage</span><span class="p">(</span><span class="o">&</span><span class="n">msg</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">))</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">TranslateMessage</span><span class="p">(</span><span class="o">&</span><span class="n">msg</span><span class="p">);</span>
<span class="w"> </span><span class="n">DispatchMessage</span><span class="p">(</span><span class="o">&</span><span class="n">msg</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">UnregisterClass</span><span class="p">(</span><span class="n">szAppName</span><span class="p">,</span><span class="w"> </span><span class="n">hInstance</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">msg</span><span class="p">.</span><span class="n">wParam</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">// Die Hauptnachrichtenschleife</span>
<span class="n">LRESULT</span><span class="w"> </span><span class="n">CALLBACK</span><span class="w"> </span><span class="n">WndProc</span><span class="p">(</span><span class="n">HWND</span><span class="w"> </span><span class="n">hWnd</span><span class="p">,</span><span class="w"> </span><span class="n">UINT</span><span class="w"> </span><span class="n">message</span><span class="p">,</span><span class="w"> </span><span class="n">WPARAM</span><span class="w"> </span><span class="n">wParam</span><span class="p">,</span><span class="w"> </span><span class="n">LPARAM</span><span class="w"> </span><span class="n">lParam</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">HDC</span><span class="w"> </span><span class="n">hdc</span><span class="p">;</span>
<span class="w"> </span><span class="n">PAINTSTRUCT</span><span class="w"> </span><span class="n">ps</span><span class="p">;</span>
<span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">WM_PAINT</span><span class="p">:</span>
<span class="w"> </span><span class="n">hdc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">BeginPaint</span><span class="p">(</span><span class="n">hWnd</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">ps</span><span class="p">);</span>
<span class="w"> </span><span class="n">TextOut</span><span class="p">(</span><span class="n">hdc</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">TEXT</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">),</span><span class="w"> </span><span class="mi">12</span><span class="p">);</span>
<span class="w"> </span><span class="n">EndPaint</span><span class="p">(</span><span class="n">hWnd</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">ps</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">WM_CLOSE</span><span class="p">:</span>
<span class="w"> </span><span class="n">DestroyWindow</span><span class="p">(</span><span class="n">hWnd</span><span class="p">);</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="no">WM_DESTROY</span><span class="p">:</span>
<span class="w"> </span><span class="n">PostQuitMessage</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">DefWindowProc</span><span class="p">(</span><span class="n">hWnd</span><span class="p">,</span><span class="w"> </span><span class="n">message</span><span class="p">,</span><span class="w"> </span><span class="n">wParam</span><span class="p">,</span><span class="w"> </span><span class="n">lParam</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Mark Russinovich: <cite class="lang" lang="en" dir="auto" style="font-style:italic">Windows Internals Part I</cite>. 6. Auflage. Microsoft Press, 2012, ISBN 978-0-7356-4873-9 (englisch).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Windows+Application+Programming+Interface&rft.au=Mark+Russinovich&rft.btitle=Windows+Internals+Part+I&rft.date=2012&rft.edition=6&rft.genre=book&rft.isbn=9780735648739&rft.pub=Microsoft+Press" style="display:none"> </span></li>
<li>Charles Petzold: <cite class="lang" lang="en" dir="auto" style="font-style:italic">Programming Windows Second Edition</cite>. 2. Auflage. Microsoft Press, 1990, ISBN 1-55615-264-7 (englisch).<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Windows+Application+Programming+Interface&rft.au=Charles+Petzold&rft.btitle=Programming+Windows+Second+Edition&rft.date=1990&rft.edition=2&rft.genre=book&rft.isbn=1556152647&rft.pub=Microsoft+Press" style="display:none"> </span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><span class="cite"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20030510041034/http://www.ecma-international.org/publications/standards/Ecma-234.htm"><i>Standard ECMA-234: Application Programming Interface for Windows.</i></a> Dezember 1995, archiviert vom <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */
.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}
/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fwww.ecma-international.org%2Fpublications%2Fstandards%2FEcma-234.htm">Original</a></span> am <span style="white-space:nowrap;">10. Mai 2003</span><span style="display:none">;</span><span class="Abrufdatum" style="display:none"> abgerufen am 5. Mai 2024</span> (englisch, Windows (3.1) API-Spezifikation).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AWindows+Application+Programming+Interface&rft.title=Standard+ECMA-234%3A+Application+Programming+Interface+for+Windows&rft.description=Standard+ECMA-234%3A+Application+Programming+Interface+for+Windows&rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20030510041034%2Fhttp%3A%2F%2Fwww.ecma-international.org%2Fpublications%2Fstandards%2FEcma-234.htm&rft.date=1995-12&rft.source=http://www.ecma-international.org/publications/standards/Ecma-234.htm&rft.language=en"> </span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="cite">Matt Pietrek: <a rel="nofollow" class="external text" href="https://learn.microsoft.com/en-us/archive/msdn-magazine/2000/july/under-the-hood-happy-10th-anniversary-windows"><i>Under the Hood: Happy 10th Anniversary, Windows.</i></a> In: <i>MSDN Magazin.</i> Microsoft, Juli 2000,<span class="Abrufdatum"> abgerufen am 11. Juni 2024</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AWindows+Application+Programming+Interface&rft.title=Under+the+Hood%3A+Happy+10th+Anniversary%2C+Windows&rft.description=Under+the+Hood%3A+Happy+10th+Anniversary%2C+Windows&rft.identifier=https%3A%2F%2Flearn.microsoft.com%2Fen-us%2Farchive%2Fmsdn-magazine%2F2000%2Fjuly%2Funder-the-hood-happy-10th-anniversary-windows&rft.creator=Matt+Pietrek&rft.publisher=Microsoft&rft.date=2000-07&rft.language=en"> </span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://learn.microsoft.com/en-us/previous-versions/ms834193(v=msdn.10)"><i>API Considerations.</i></a> Microsoft,<span class="Abrufdatum"> abgerufen am 2. September 2013</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AWindows+Application+Programming+Interface&rft.title=API+Considerations&rft.description=API+Considerations&rft.identifier=https%3A%2F%2Flearn.microsoft.com%2Fen-us%2Fprevious-versions%2Fms834193%28v%3Dmsdn.10%29&rft.publisher=Microsoft"> </span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://web.mit.edu/cascon/microsoft/win32sins.htm"><i>How to download and install Win32s using Windows 3.1 File Manager.</i></a> In: <i>web.mit.edu.</i> <a href="Massachusetts_Institute_of_Technology" title="Massachusetts Institute of Technology">MIT</a>, 18. Februar 1999,<span class="Abrufdatum"> abgerufen am 7. Mai 2016</span> (englisch): „<span lang="en">Win32s is an extension for the Windows 3.1 and Windows 3.11 operating systems, which allows them to run some 32-bit applications.</span>“</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AWindows+Application+Programming+Interface&rft.title=How+to+download+and+install+Win32s+using+Windows+3.1+File+Manager&rft.description=How+to+download+and+install+Win32s+using+Windows+3.1+File+Manager&rft.identifier=https%3A%2F%2Fweb.mit.edu%2Fcascon%2Fmicrosoft%2Fwin32sins.htm&rft.publisher=%5B%5BMassachusetts+Institute+of+Technology%7CMIT%5D%5D&rft.date=1999-02-18&rft.language=en"> </span></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://stephan.win31.de/w32slist.htm"><i>The Win32s compatibility list.</i></a> In: <i>win31.de.</i><span class="Abrufdatum"> Abgerufen am 5. Mai 2022</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AWindows+Application+Programming+Interface&rft.title=The+Win32s+compatibility+list&rft.description=The+Win32s+compatibility+list&rft.identifier=http%3A%2F%2Fstephan.win31.de%2Fw32slist.htm&rft.language=en"> </span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-12-08" href="https://de.wikipedia.org/wiki/?title=Windows_Application_Programming_Interface&oldid=262228948">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>